package org.lintcode_Close.Stage1_Easy_50.O3数组与循环;

/**
 * @Auther: qingle
 * @Date: 2024/8/17-15:55
 * @Description:
 * 给一组整数，按照升序排序，使用选择排序，冒泡排序，插入排序或者任何 O(n2) 的排序算法。
 * @version: 1.0
 */
public class 整数排序 {

	// 选择排序
	public static void selectSort(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			int minIndex = i;
			for (int j = i + 1; j < arr.length; j++) {
				if (arr[j] < arr[minIndex]) {
					minIndex = j;
				}
			}
			int temp = arr[i];
			arr[i] = arr[minIndex];
			arr[minIndex] = temp;
		}
	}

	// 冒泡排序
	public static void bubbleSort(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr.length - i - 1; j++) {
				if (arr[j] > arr[j + 1]) {
					int temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
	}

	// 插入排序
	public static void insertSort(int[] arr) {
		for (int i = 1; i < arr.length; i++) {
			int temp = arr[i];
			int j = i - 1;
			for (; j >= 0; j--) {
				if (arr[j] > temp) {
					arr[j + 1] = arr[j];
				} else {
					break;
				}
			}
			arr[j + 1] = temp;
		}
	}

	public static void main(String[] args) {
		int[] arr = { 3, 2, 1, 4, 5 };
//		selectSort(arr);
//		bubbleSort(arr);
		insertSort(arr);
		for (int i : arr) {
			System.out.print(i + " ");
		}
	}
}
